import { login, logout, getInfo } from '@/api/login'
import { getToken, setToken, removeToken } from '@/utils/auth'
import { getStudent } from '@/api/forum/student'
import defAva from '@/assets/images/profile.jpg'
import {defineStore} from 'pinia'

const useUserStore = defineStore(
  'user',
  {
    state: () => ({  
      token: getToken(),
      id: '',
      name: '',
      avatar: '',
      roles: [],
      permissions: [],
      nickName: '',
      sex: 0,
      phone: null,
      email: null,
      schoolId: null,
      collegeId: null,
      specialtyId: null,
      grade: null,
      lastLoginTime: null,
      update: 0
    }),
    actions: {
      // 登录
      login(userInfo) {
        const username = userInfo.username.trim()
        const password = userInfo.password
        const code = userInfo.code
        const uuid = userInfo.uuid
        return new Promise((resolve, reject) => {
          login(username, password, code, uuid).then(res => {
            setToken(res.token)
            this.token = res.token
            resolve()
          }).catch(error => {
            reject(error)
          })
        })
      },
      // 获取用户信息
      getInfo() {
        return new Promise((resolve, reject) => {
          getInfo().then(res => {
            const user = res.user
            const avatar = (user.avatar == "" || user.avatar == null) ? defAva : "/prod-api" + user.avatar;
            if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组
              this.roles = res.roles
              this.permissions = res.permissions
            } else {
              this.roles = ['ROLE_DEFAULT']
            }
            this.id = user.userId
            this.name = user.userName
            this.avatar = avatar
            // console.log("用户信息获取成功")
            getStudent(user.userId).then((res)=>{
              // console.log(res)
              this.nickName = res.data.nickName;
              this.sex = res.data.sex;
              this.phone = res.data.phonenumber;
              this.email = res.data.email;
              this.schoolId = res.data.schoolId;
              this.collegeId = res.data.collegeId;
              this.specialtyId = res.data.specialtyId;
              this.grade = res.data.grade;
              this.lastLoginTime = res.data.loginDate;
              resolve(res)
            })
          }).catch(error => {
            reject(error)
          })
        })
      },
      // 退出系统
      logOut() {
        return new Promise((resolve, reject) => {
          logout(this.token).then(() => {
            // console.log("登出-1")
            this.token = ''
            // console.log("登出-2")
            this.roles = []
            // console.log("登出-3")
            this.permissions = []
            // console.log("登出-4")
            removeToken()
            // console.log("登出-5")
            resolve()
          }).catch(error => {
            // console.log("登出-6")
            reject(error)
          })
        })
      },
      updateStudent(){
        getStudent(this.id).then((res)=>{
          this.nickName = res.data.nickName;
          this.sex = res.data.sex;
          this.phone = res.data.phonenumber;
          this.email = res.data.email;
          this.schoolId = res.data.schoolId;
          this.collegeId = res.data.collegeId;
          this.specialtyId = res.data.specialtyId;
          this.grade = res.data.grade;
          this.lastLoginTime = res.data.loginDate;
          this.update = this.update+1;
        })
      },
      updateUser(){
        getInfo().then(res=>{
          this.id = res.user.userId;
          this.name = res.user.userName;
          this.avatar = res.user.avatar;
          this.updateStudent();
        })
      }
    }
  })

export default useUserStore
